    package View;

import java.util.Scanner;
import DAO.FornecedorDAO;
import Pojo.Fornecedor;
import Pojo.Item;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.*;

    
/**Classe que serve como menu para controle dos Fornecedores
 * 
 * @author Vitor
 */
public class MenuFornecedor{
    
    /**
     * Metodo que imprime as opcoes que usuario tera para mexer com o fornencedor
     */
    private void imprimeMenu(){
        System.out.println("--------Menu Fornecedor---------");
        System.out.println("\n-------Escolha uma opcao-----");
        System.out.println("(1)Cadastrar Fornecedor");
        System.out.println("(2)Excluir Fornecedor");
        System.out.println("(3)Listar todos Fornecedores");
        System.out.println("(4)Buscar Fornecedor");
        System.out.println("(5)Listar intens do fornecedor");
        System.out.println("(6)Voltar para o menu principal");
        System.out.println("Entre com uma opção: ");
    }
    
    /**Metodo que que recebe todas as informações do forncedor e as atribui na no atributos da classe fornecedor
     * faz a verificação do nome do fornecedor em busca dele na lista para encontrar se ele ja foi cadastrado
     * e não permitir cadastrar fornecedores iguais
     * faz a verificação pele codigo tambem para não permitir fornecedores com o mesmo codigo
     * @param fornecedorDao - Funcoes que auxiliam na busca de fornecedores e retorna a lista de fornecedores
     * @return Fornecedor - fornecedor cadastrado
     */
    public Fornecedor cadastroFornecedor(FornecedorDAO fornecedorDao){
        Scanner scanner = new Scanner(System.in);
        ArrayList<Fornecedor> lista;
        String nome;
        lista = fornecedorDao.getListaFornecedores();
        Fornecedor novo = new Fornecedor();
        do{
            System.out.println("Entre com o nome do fornecedor:");
            novo.setNome(scanner.nextLine());
            if(lista.contains(novo)){
              System.out.println("Fornecedor ja existente!");
            }
        }while(lista.contains(novo)==true);
        do{
          System.out.println("Codigo do fornecedor:");
          novo.setCodigo(Integer.parseInt(scanner.nextLine()));
          if(fornecedorDao.buscaFornecedorCodigo(novo.getCodigo())!=null){
            System.out.println("Fornecedor ja existente!");
          }
        }while(fornecedorDao.buscaFornecedorCodigo(novo.getCodigo())!=null);
        System.out.println("Endereco do fornecedor:");
        nome = scanner.nextLine();
        novo.setEndereco(nome);
        System.out.println("Numero de telefone fornecedor:");
        int numero = Integer.parseInt(scanner.nextLine());
        novo.setTelefone(numero);
        fornecedorDao.adicionarFornecedor(novo);
        return novo;
    }
    
    /**Metodo que executa a opçãos do menu, faz verificações caso o fornecedor não exista
     * @param fornecedorDao - Funções que auxiliam na busca de um forncedor, na exclusão
     * e retorna uma lista de fornecedores 
     * @throws FileNotFoundException - Sem descricao
     */
    public void menuOpcao(FornecedorDAO fornecedorDao) throws FileNotFoundException{
        Scanner scanner = new Scanner(System.in);
        MenuItem menuItem = new MenuItem();
        byte opcao,i;        
        do{
            imprimeMenu();
            opcao = Byte.parseByte(scanner.nextLine());
            switch(opcao){
                case 1:
                    cadastroFornecedor(fornecedorDao);
                break;
                case 2:
                    System.out.println("Entre com o nome do Fornecedor a excluir:");
                    String aux = scanner.nextLine();
                    if(fornecedorDao.excluirFornecedor(aux)){
                        System.out.println("Fornecedor Excluido com Sucesso!");
                    }else{
                        System.out.println("Fornecedor não encontrado.");
                    }
                    break;
                case 3:
                    ArrayList<Fornecedor> lista = fornecedorDao.getListaFornecedores();
                    if(lista.isEmpty()){
                        System.out.println("Nenhum Fornecedor Cadastrado!");
                        break;  
                    }
                    Collections.sort(lista);
                    for(i=0;i<lista.size();i++){
                      System.out.println("Nome = "+ lista.get(i).getNome()+"  Codigo = " + lista.get(i).getCodigo() 
                      +"  Endereco = " + lista.get(i).getEndereco() 
                      + "   Numero = " + lista.get(i).getTelefone());
                    }
                    break;
                case 4:
                    Fornecedor fornecedorAux;
                    System.out.println("Digite o nome do fornecedor que deseja buscar:  ");
                    String aux2 = scanner.nextLine();
                    if((fornecedorAux = fornecedorDao.buscaFornecedorNome(aux2))==null){
                        System.out.println("Fornecedor não econtrado! ");
                    }
                    else{
                        System.out.println("Nome = " + fornecedorAux.getNome() + "   Codigo = " 
                        + fornecedorAux.getCodigo()+ "   Endereco = " + fornecedorAux.getEndereco() 
                        + "   Numero = " + fornecedorAux.getTelefone());
                    }
                    break;
                case 5:
                    ArrayList<Fornecedor> lista1 = fornecedorDao.getListaFornecedores();
                    if(lista1.isEmpty()){
                        System.out.println("Nenhum Fornecedor Cadastrado!");
                        break;  
                    }
                    System.out.println("Digite o fornecedor: ");
                    String fo = scanner.nextLine();
                    Fornecedor fornecedorAux2;
                    if((fornecedorAux2 = fornecedorDao.buscaFornecedorNome(fo))==null){
                        System.out.println("Fornecedor nao cadastrado");
                        break;
                    }
                    ArrayList<Item> listaItensAux;
                    listaItensAux=fornecedorAux2.getListaItens();
                    for(Item item: listaItensAux){
                        menuItem.imprimirItem(item);
                    }
                    System.out.println();
                    break;
                case 6:
                    fornecedorDao.escreverArquivo();
                    break;
                default:
                    System.out.println("Opção invalida!!");
            }
        }while(opcao!=6);
    }

}
